package com.hc.jdbc.base;

//查询所有用户数据，封装到一个list<Map>集合中

import com.mysql.cj.jdbc.Driver;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Demo03 {
    public static  void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");

        Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3333/cd_db?user=root&password=123");

        //创建预编译sql的对象
        PreparedStatement preparedStatement = connection.prepareStatement("select * from t_user");

        //执行sql获取结果集
        ResultSet resultSet = preparedStatement.executeQuery();
        //解析结果集，放入list<Map>中
        List<Map> list = new ArrayList<>();
        //获取列信息对象
        ResultSetMetaData metaData = resultSet.getMetaData();
        //获取列的数量: 有了它以后，我们可以水平遍历列
        int columnCount = metaData.getColumnCount();

        while(resultSet.next()) //每一行的数据
        {
            //一行数据，对应一个Map
            Map map = new HashMap<>();
            for (int i = 1; i <= columnCount; i++) {
                //获取指定列下角标的值：resultSet
                Object value = resultSet.getObject(i);
                //获取指定列下角标的名称：metaData
                //getColumnLabel：会获取类的别名，没有别名才获取名称。
                //不要使用getColumnName，因为它只会获取列的名称。
                String columnLabel = metaData.getColumnLabel(i);
                map.put(columnLabel, value);
            }
            list.add(map);
        }

        System.out.println("list = " + list);

        //关闭资源
        resultSet.close();
        preparedStatement.close();
        connection.close();
    }
}
